<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // Promise.race实现 ：

        let p1 = new Promise((reslove, reject) => {
            setTimeout(() => {
                reslove(111)
            }, 2000);
        })


        let p2 = new Promise((reslove, reject) => {
            setTimeout(() => {
                reslove(222)
                // reject("err")
            }, 1000);
        })

        let p3 = new Promise((reslove, reject) => {
            setTimeout(() => {
                reslove(333)
            }, 3000);
        })

        // Promise.race([p1,p2,p3]).then(res=>{
        //     console.log(res);
        // },err=>{
        //     console.log(err);
        // })

        function MyRace(arr) {
            return new Promise((reslove, reject) => {
                // reslove(111);
                // arr.forEach(p=>{
                //     p.then(res=>{
                //         reslove(res);
                //     },err=>{
                //         reject(err);
                //     })
                // })

                arr.forEach(p => {
                    p.then(reslove,reject)
                })

            });
        }

        MyRace([p1, p2, p3]).then(res => {
            console.log(res);
        }, err => {
            console.log(err);
        })



        // function myfn(){
        //     console.log("myfn");
        // }

        // 调用执行函数
        // setTimeout(() => {
        //     myfn();
        // }, 2000);

        // // 直接让settimeout 内部执行myfn函数；
        // setTimeout(myfn, 2000);


        // Promise.all 实现

        function MyAll(arr){
            let count = 0;
            return new Promise(reslove=>{
                let resArr = [];  // 存放 结果的数组
                arr.forEach(p=>{
                    p.then(res=>{
                        resArr.push(res);  // 收集结果添加到 resArr里去
                        // console.log(resArr);
                        count++;
                        if(count>=arr.length){
                            // 一定是结果收集完毕
                            reslove(resArr);
                        }
                        // reslove(resArr);
                    })

                })
            })
        }   
        MyAll([p1,p2,p3]).then(res=>{
            console.log("外部打印",res);
        })


        
    </script>
</body>

</html>